home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Universe of 3,000 Games
/
Universe of 3000 Game Patches.dmg
/
utils
/
src
/
rockridg.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-03-02
|
2KB
|
92 lines
/*
* Rockridg.c handles filename conversion.
*/
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <assert.h>
#include "rockridg.h"
static const char trans_tbl[] = "\\00_trans.tbl";
#if 0
static const char trans_tbl[] = "\\trans.tbl";
#endif
int
is_a_slash(char c) {
return (c == '\\' || c == '/');
}
/* If the disc has Rock Ridge extensions, the names in the 00_index.txt
* files are not the real names on the disc. Look up the
* actual names in the 00_trans.tbl files.
*/
char *
get_real_filename(char *base_dir, char *rockridge_name) {
static char rtn_str[80];
char in_line[128];
FILE *fp;
char *s, *t, c, *eof;
int i, flen, len;
assert(base_dir[0] != '\0');
assert(base_dir[1] == ':');
strcpy(rtn_str, base_dir);
s = rockridge_name;
t = rtn_str + strlen(rtn_str) - 1;
if (is_a_slash(*t))
*t = '\0';
else
t++;
if (is_a_slash(*s))
s++;
/*
* Step through the rockridge path one directory at a time and build
* the "real" path by reading the 00_trans.tbl at each level.
*/
while (1) {
flen = strlen(rtn_str);
strcpy(rtn_str + flen, trans_tbl);
for (t = s; *t != '\0' && *t != '/' && *t != '\\'; ++t);
c = *t;
*t = '\0';
if ((fp = fopen(rtn_str, "rt")) == NULL) {
*t = c; /* Can't open 00_trans.tbl. */
return rockridge_name; /* Return the original filename. */
}
while ((eof = fgets(in_line, sizeof(in_line) - 1, fp)) != NULL) {
if (*in_line == 'L')
continue;
assert(*in_line == 'F' || *in_line == 'D');
assert(in_line[1] == ' ');
assert(in_line[36] == '\t');
len = strlen(in_line);
assert(in_line[len - 1] == '\n');
in_line[--len] = '\0';
if (stricmp(s, in_line + 37) == 0)
break;
}
fclose(fp);
if (eof == NULL) /* Entry not found. Return original filename. */
return rockridge_name;
for (i = 36; in_line[i] <= ' '; --i)
in_line[i] = '\0';
strcpy(rtn_str + flen + 1, in_line + 2);
if (c == '\0')
return rtn_str;
*t = c;
s = t + 1;
}
}